home *** CD-ROM | disk | FTP | other *** search
/ Collection of Tools & Utilities / Collection of Tools and Utilities.iso / turbovis / tvtool17.zip / NODEBUG.H < prev    next >
C/C++ Source or Header  |  1993-05-13  |  5KB  |  129 lines

  1. /*  Copyright (C) 1993   Marc Stern  (internet: stern@mble.philips.be)  */
  2.  
  3. /***
  4.  *  Function    :  noDebug1 ... noDebug18
  5.  *
  6.  *  Description :  Destroy interrupt vectors used by MS-DOS debuggers
  7.  *                 Replace them with another vector
  8.  *                 ('divide by zero' or 'exit').
  9.  *                 Several codings of the same functionalities
  10.  *                 to ennoy hackers.
  11.  *                 These macros have to be called several times
  12.  *                 anywhere in you code (outside loops).
  13.  *
  14.  *  Parameters  :  none
  15.  *
  16.  *  Side-effects:  Warning, once used, it is impossible to debug the program.
  17.  *
  18.  *  Return      :  none
  19.  *
  20.  *  OS/Compiler :  MS-DOS
  21.  ***/
  22.  
  23. #ifndef _NODEBUG1
  24.  
  25. #include <dos.h>   /* for MK_FP */
  26.  
  27.      /*    _NODEBUG*():  internal templates macros for all addresses    */
  28.  
  29. /* 4 bytes at a time */
  30. #define _NODEBUG1( addr ) \
  31.         ( *( (long far *) 0x04 ) = *( (long far *) 0x0C ) = \
  32.            *( (long far *) addr ) \
  33.         )
  34.  
  35. /* idem but other order */
  36. #define _NODEBUG2( addr ) \
  37.         ( *( (long far *) 0x0C ) = *( (long far *) 0x04 ) = \
  38.            *( (long far *) addr ) \
  39.         )
  40.  
  41. /* idem but 2 bytes at a time */
  42. #define _NODEBUG3( addr ) \
  43.         ( *( (short far *) 0x04 ) = *( (short far *) 0x0C ) = \
  44.            *( (short far *) addr ) , \
  45.           *( (short far *) 0x06 ) = *( (short far *) 0x0E ) = \
  46.            *( (short far *) addr + 2 ) \
  47.         )
  48.  
  49. /* idem but other order */
  50. #define _NODEBUG4( addr ) \
  51.         ( *( (short far *) 0x0C ) = *( (short far *) 0x04 ) = \
  52.            *( (short far *) addr ) , \
  53.           *( (short far *) 0x0E ) = *( (short far *) 0x06 ) = \
  54.            *( (short far *) addr + 2 ) \
  55.         )
  56.  
  57. /* idem but other order */
  58. #define _NODEBUG5( addr ) \
  59.         ( *( (short far *) 0x04 ) = *( (short far *) addr ),  \
  60.           *( (short far *) 0x06 ) = *( (short far *) addr+2), \
  61.           *( (short far *) 0x0C ) = *( (short far *) addr),   \
  62.           *( (short far *) 0x0E ) = *( (short far *) addr+2)  \
  63.         )
  64.  
  65. /* idem but other order */
  66. #define _NODEBUG6( addr ) \
  67.         ( *( (short far *) 0x0E ) = *( (short far *) addr+2), \
  68.           *( (short far *) 0x0C ) = *( (short far *) addr),   \
  69.           *( (short far *) 0x06 ) = *( (short far *) addr+2), \
  70.           *( (short far *) 0x04 ) = *( (short far *) addr )   \
  71.         )
  72.  
  73. /* idem but 1 byte at a time */
  74. #define _NODEBUG7( addr ) \
  75.         ( *( (char far *) 0x04 ) = *( (char far *) 0x0C ) = *( (char far *) addr ),  \
  76.           *( (char far *) 0x05 ) = *( (char far *) 0x0D ) = *( (char far *) addr+1), \
  77.           *( (char far *) 0x06 ) = *( (char far *) 0x0E ) = *( (char far *) addr+2), \
  78.           *( (char far *) 0x07 ) = *( (char far *) 0x0F ) = *( (char far *) addr+3)  \
  79.         )
  80.  
  81. /* idem but other order */
  82. #define _NODEBUG8( addr ) \
  83.         ( *( (char far *) 0x04 ) = *( (char far *) addr ),  \
  84.           *( (char far *) 0x05 ) = *( (char far *) addr+1), \
  85.           *( (char far *) 0x06 ) = *( (char far *) addr+2), \
  86.           *( (char far *) 0x07 ) = *( (char far *) addr+3), \
  87.           *( (char far *) 0x0C ) = *( (char far *) addr),   \
  88.           *( (char far *) 0x0D ) = *( (char far *) addr+1), \
  89.           *( (char far *) 0x0E ) = *( (char far *) addr+2)  \
  90.           *( (char far *) 0x0F ) = *( (char far *) addr+3)  \
  91.         )
  92.  
  93. /* idem but other order */
  94. #define _NODEBUG9( addr ) \
  95.         ( *( (char far *) 0x0C ) = *( (char far *) addr),   \
  96.           *( (char far *) 0x07 ) = *( (char far *) addr+3), \
  97.           *( (char far *) 0x0D ) = *( (char far *) addr+1), \
  98.           *( (char far *) 0x06 ) = *( (char far *) addr+2), \
  99.           *( (char far *) 0x0E ) = *( (char far *) addr+2), \
  100.           *( (char far *) 0x05 ) = *( (char far *) addr+1), \
  101.           *( (char far *) 0x0F ) = *( (char far *) addr+3), \
  102.           *( (char far *) 0x04 ) = *( (char far *) addr )   \
  103.         )
  104.                            
  105.  
  106. /*  replace by 'divide by zero' vector  =>  stop the program  */
  107. #define noDebug1()   _NODEBUG1( 0x00 )
  108. #define noDebug2()   _NODEBUG2( 0x00 )
  109. #define noDebug3()   _NODEBUG3( 0x00 )
  110. #define noDebug4()   _NODEBUG4( 0x00 )
  111. #define noDebug5()   _NODEBUG5( 0x00 )
  112. #define noDebug6()   _NODEBUG6( 0x00 )
  113. #define noDebug7()   _NODEBUG7( 0x00 )
  114. #define noDebug8()   _NODEBUG8( 0x00 )
  115. #define noDebug9()   _NODEBUG9( 0x00 )
  116.  
  117. /*  replace by 'Exit' vector  =>  stop the program  */
  118. #define noDebug10()   _NODEBUG1( MK_FP(_psp, 0x0A) )
  119. #define noDebug11()   _NODEBUG2( MK_FP(_psp, 0x0A) )
  120. #define noDebug12()   _NODEBUG3( MK_FP(_psp, 0x0A) )
  121. #define noDebug13()   _NODEBUG4( MK_FP(_psp, 0x0A) )
  122. #define noDebug14()   _NODEBUG5( MK_FP(_psp, 0x0A) )
  123. #define noDebug15()   _NODEBUG6( MK_FP(_psp, 0x0A) )
  124. #define noDebug16()   _NODEBUG7( MK_FP(_psp, 0x0A) )
  125. #define noDebug17()   _NODEBUG8( MK_FP(_psp, 0x0A) )
  126. #define noDebug18()   _NODEBUG9( MK_FP(_psp, 0x0A) )
  127.       
  128.  
  129. #endif